package br.com.studyLife.controller;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.studyLife.dao.AlertaDao;
import br.com.studyLife.dao.RelacionamentoDao;
import br.com.studyLife.dao.UsuarioDao;
import br.com.studyLife.modelo.Alerta;
import br.com.studyLife.modelo.Relacionamento;
import br.com.studyLife.modelo.Usuario;
import br.com.studyLife.modelo.UsuarioWeb;

@Resource
public class RelacionamentoController {

	private final AlertaDao alertaDao;
	private final UsuarioDao usuarioDao;
	private final Result result;
	private final UsuarioWeb usuarioWeb;
	private final RelacionamentoDao dao;
	
	public RelacionamentoController(AlertaDao alertaDao,
									UsuarioDao usuarioDao,
									Result result,
									UsuarioWeb usuarioWeb,
									RelacionamentoDao dao) {
		this.alertaDao = alertaDao;
		this.usuarioDao = usuarioDao;
		this.result = result;
		this.usuarioWeb = usuarioWeb;
		this.dao = dao;
	}
	
	@Path("/amizade/aceitar/{alerta.remetente.id }/{alerta.id }")
	public void aceitar(Alerta alerta) {
		Usuario remetente = null;
		Usuario destinatario = null;
		try {
			remetente = usuarioDao.procura(alerta.getRemetente().getId());
			destinatario = usuarioWeb.getUser();
			if(!alertaDao.existeAlerta(destinatario, remetente)) {
				System.out.println("Não existe este alerta!");
				result.redirectTo(AlertaController.class).alertas(); // não existe alerta
			}
		} catch (Exception e) {
			System.out.println("Alerta não existe!");
			e.printStackTrace();
			result.redirectTo(AlertaController.class).alertas(); // não conseguiu encontrar
		}
		
		Relacionamento relacionamento = new Relacionamento();
		relacionamento.setUsuario1(remetente);
		relacionamento.setUsuario2(destinatario);
		
		dao.adicionar(relacionamento);
		System.out.println("relacionamento adicionado!");
		
		// exclui o alerta
		Alerta alertaCarregado = alertaDao.carrega(alerta);
		alertaDao.excluir(alertaCarregado);
		
		result.redirectTo(AlertaController.class).alertas();
	}
	
	@Path("/amizade/recusar/{alerta.remetente.id }/{alerta.id }")
	public void recusar(Alerta alerta) {
		Usuario remetente = null;
		Usuario destinatario = null;
		try {
			remetente = usuarioDao.procura(alerta.getRemetente().getId());
			destinatario = usuarioWeb.getUser();
			if(!alertaDao.existeAlerta(destinatario, remetente)) {
				System.out.println("Não existe este alerta!");
				result.redirectTo(AlertaController.class).alertas(); // não existe alerta
			}
		} catch (Exception e) {
			System.out.println("Alerta não existe!");
			e.printStackTrace();
			result.redirectTo(AlertaController.class).alertas(); // não conseguiu encontrar
		}
		
		Alerta alertaCarregado = alertaDao.carrega(alerta);
		alertaDao.excluir(alertaCarregado);
		
		result.redirectTo(AlertaController.class).alertas();
	}
}
